import random
from datetime import datetime, timedelta

from flask import Flask, session
# 21.导入 info 初始化文件
from flask import current_app

from info import create_app, db, models  # 导入目的在迁移的时候知道models存在,可以迁移

# 48.数据库迁移 导入包
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager

from info.models import User

app = create_app("develop")

manager = Manager(app)

Migrate(app, db)

manager.add_command("db", MigrateCommand)


# 创建管理方法:通过 flask_script模快提供的 option 装饰器
# 参数1:表示传递的值 参数2:用户说明参数1,参数3:dest目标值用来传递形参的
@manager.option('-u', '-username', dest='username')
@manager.option('-p', '-password', dest='password')
def create_super_user(username, password):
    """
    -1.创建管理员用户
    -2.设置属性
    -3.保存属性到数据库
    :param username: 用户名
    :param password: 密码
    :return:
    """
    # -1.创建管理员用户
    admin = User()

    # -2.设置属性
    admin.nick_name = username
    admin.mobile = username
    admin.password = password
    admin.is_admin = True

    # -3.保存属性到数据库
    try:
        db.session.add(admin)
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        db.session.rollback()
        return "创建管理员用户失败"

    return "创建管理员用户成功"


# 创建添加测试用户方法
@manager.option('-t', '--test', dest='test')
def add_test_user(test):
    # 定义用户列表
    user_list = []

    # 创建测试用户,设置属性
    for i in range(0, 100):
        user = User()
        user.mobile = "1338%7d" % i
        user.nick_name = "宇宙无敌天下第%d帅" % i
        user.password_hash = "pbkdf2:sha256:50000$WylUq3GD$02cb31d6a7ee1eed3d3b1fd0990b1841df5a2659621b4f01b2c4bb6b34d1d9bc"

        # 最近七天以来登陆时间
        user.last_login = datetime.now() - timedelta(seconds=random.randint(0, 3600 * 24 * 7))
        user_list.append(user)

    # 添加到数据库
    try:
        db.session.add_all(user_list)
    except Exception as e:
        current_app.logger.error(e)
        return "创建用户失败"

    return "创建用户成功"


if __name__ == "__main__":
    # print(app.url_map)
    manager.run()
